﻿using Dlls;
using Persistencia;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace UI.Views.Cadastros
{
    /// <summary>
    /// Interaction logic for frmCadastrarGrupo.xaml
    /// </summary>
    public partial class frmCadastrarGrupo : Window
    {

        private GrupoPessoasDLL eGrupoPessoas;
        private GrupoProdutoDLL eGrupoProdutos;

        private GrupoPessoa grupoPessoa;
        private GrupoProduto grupoProduto;

        private int tipoGrupo = -1;
        private int codigoParaAlterarOuDeletar = 0;

        public frmCadastrarGrupo()
        {
            InitializeComponent();
            
        }

        public void SetarTipoDoGrupo(object sender, SelectionChangedEventArgs e)
        {
            tipoGrupo = cbxTipoDoGrupo.SelectedIndex ;

            if (tipoGrupo == 0)
            {
                eGrupoPessoas = new GrupoPessoasDLL();
                lblLimiteDeCredito.Visibility = Visibility.Visible;
                txtLimiteCredito.IsEnabled = true;
                txtLimiteCredito.Visibility = Visibility.Visible;
                colLimiteCredito.Visibility = Visibility.Visible;
            }
            else if (tipoGrupo==1)
            {
                eGrupoProdutos = new GrupoProdutoDLL();
                lblLimiteDeCredito.Visibility = Visibility.Hidden;
                txtLimiteCredito.IsEnabled = false;
                txtLimiteCredito.Visibility = Visibility.Hidden;
                colLimiteCredito.Visibility = Visibility.Hidden;
            }
            Reset();
            List();
        }

        private void List() 
        {
            if (tipoGrupo != -1)
            {
                if (tipoGrupo == 0)
                {
                    dynamicDataGrid.ItemsSource = eGrupoPessoas.List();
                }
                else if (tipoGrupo == 1)
                {
                    dynamicDataGrid.ItemsSource = eGrupoProdutos.List();
                }
            }
        }

        private void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
                if (codigoParaAlterarOuDeletar != 0)
                {
                    if (tipoGrupo == 0)
                    {
                        GrupoPessoa grupoPessoa = new GrupoPessoa()
                        {
                            Nome = txtNomeGrupo.Text.ToString(),
                            Comissao = decimal.Parse(txtComissao.Text.ToString()),
                            LimiteCredito = decimal.Parse(txtLimiteCredito.Text.ToString())
                        };

                        eGrupoPessoas.Update(codigoParaAlterarOuDeletar, grupoPessoa);
                        grupoPessoa = new GrupoPessoa();
                    }
                    else if (tipoGrupo == 1)
                    {

                        GrupoProduto grupoProduto = new GrupoProduto()
                        {
                            Nome = txtNomeGrupo.Text.ToString(),
                            Comissao = decimal.Parse(txtComissao.Text.ToString())
                        };

                        eGrupoProdutos.Update(codigoParaAlterarOuDeletar, grupoProduto);
                    }
                    codigoParaAlterarOuDeletar = 0;
                    MessageBox.Show("Grupo alterado com sucesso.");

                }
            
            else
            {
                if (tipoGrupo == 0)
                {
                    try
                    {

                   
                    GrupoPessoa grupoPessoa = new GrupoPessoa()
                    {
                    
                        Nome = txtNomeGrupo.Text.ToString(),
                        Comissao = decimal.Parse(txtComissao.Text.ToString()),
                        LimiteCredito = decimal.Parse(txtLimiteCredito.Text.ToString())
                    };
                    eGrupoPessoas.Insert(grupoPessoa);
                    grupoPessoa = new GrupoPessoa();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Registro nao pode ser gravado, favor verificar os campos preenchidos");
                    }
                   
                }
                else if (tipoGrupo == 1)
                {

                    GrupoProduto grupoProduto = new GrupoProduto()
                    {
                        Nome = txtNomeGrupo.Text.ToString(),
                        Comissao = decimal.Parse(txtComissao.Text.ToString())
                    };

                    eGrupoProdutos.Insert(grupoProduto);

                    MessageBox.Show("Grupo adicionado com sucesso.");
                    grupoProduto = new GrupoProduto();
                }
            }
            List();
            Reset();
        }

        private void Edit(object sender, SelectedCellsChangedEventArgs e)
        {
            if (tipoGrupo != -1)
            {
                if (tipoGrupo == 0)
                {
                    grupoPessoa = (GrupoPessoa)dynamicDataGrid.SelectedItem;
                }
                else if (tipoGrupo == 1)
                {
                    grupoProduto = (GrupoProduto)dynamicDataGrid.SelectedItem;
                }

                if (grupoPessoa != null)
                {
                    codigoParaAlterarOuDeletar = grupoPessoa.Codigo;
                    txtNomeGrupo.Text = grupoPessoa.Nome;
                    txtComissao.Text = grupoPessoa.Comissao.ToString();
                    txtLimiteCredito.Text = grupoPessoa.LimiteCredito.ToString();
                }
                else if (grupoProduto != null)
                {
                    codigoParaAlterarOuDeletar = grupoProduto.Codigo;
                    txtNomeGrupo.Text = grupoProduto.Nome;
                    txtComissao.Text = grupoProduto.Comissao.ToString();
                }
            }
        }

        private void Delete(object sender, RoutedEventArgs e)
        {
            if (codigoParaAlterarOuDeletar != 0)
            {
                if (tipoGrupo == 0)
                {
                    eGrupoPessoas.Delete(grupoPessoa);
                }
                else if (tipoGrupo == 1)
                {
                    eGrupoProdutos.Delete(grupoProduto);
                }
            
                List();
                Reset();
                MessageBox.Show("Grupo excluido com sucesso.");
            }
        }

        public void Novo(object sender, RoutedEventArgs e)
        {
            Reset();
        }

        private void Reset() 
        {
            codigoParaAlterarOuDeletar = 0;
            txtNomeGrupo.Text = "";
            txtComissao.Text = "";
            txtLimiteCredito.Text = "";
        }
    }
}
